/*************************************************
* 描述：自定义列头视图，支持列头颜色绘制
  *
  * File：cxiheaderview.h
  * Author：gaomaolong@mozihealthcare.cn
  * Date：2025-10-21
  * Update：
  ************************************************/
#ifndef CXIHEADERVIEW_H
#define CXIHEADERVIEW_H

#include <QHeaderView>
#include <QColor>

class CxiHeaderView : public QHeaderView
{
    Q_OBJECT

public:
    explicit CxiHeaderView(Qt::Orientation orientation, QWidget* parent = nullptr);

    ~CxiHeaderView() override;

    /**
     * @brief 设置列头颜色
     * @param logicalIndex 列索引
     * @param foreColor 前景色
     */
    void setForeColor(int logicalIndex, const QColor& foreColor);

    /**
     * @brief 列头背景色
     * @param logicalIndex 列索引
     * @param backColor 背景色
     */
    void setBackColor(int logicalIndex, const QColor& backColor);

protected:
    void mousePressEvent(QMouseEvent* e) override;

    void mouseMoveEvent(QMouseEvent* e) override;

    void mouseReleaseEvent(QMouseEvent* e) override;

    void paintSection(QPainter* painter, const QRect& rect, int logicalIndex) const override;

    void paintEvent(QPaintEvent* e) override;

private:
    /**
     * @brief 更新列头颜色
     * @param logicalIndex 列索引
     * @param opt 列头选项
     */
    void updateHeaderColor(int logicalIndex, QStyleOptionHeader& opt) const;

    /**
     * @brief 更新列对齐方式
     * @param logicalIndex 列索引
     * @param opt 列头选项
     */
    void updateTextAlignment(int logicalIndex, QStyleOptionHeader& opt) const;

private:
    QMap<int, QColor> m_headerForeColor;
    QMap<int, QColor> m_headerBackColor;
};

#endif // CXIHEADERVIEW_H